package lv.servidordisqueria.domain;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import lv.mensajeriadisqueria.idomain.IInterprete;
import lv.mensajeriadisqueria.idomain.ITversion;

import org.hibernate.annotations.Type;

/**
 * Es la clase coleccion cual se mapea con la tabla INTERPRETE de la
 * base de datos
 */
@Entity
@Table(name = "INTERPRETE")
@PrimaryKeyJoinColumn(name = "ID_MUSICO")
public class Interprete extends Musico implements IInterprete {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1841062569077125524L;

	@Column(name = "INVITADO")
	private Boolean invitado;

	@ManyToMany(targetEntity = Tversion.class, fetch = FetchType.LAZY, 
			cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@JoinTable(name="RELACION_INTERPRETE_VERSION", joinColumns=@JoinColumn(name="ID_MUSICO"),
			inverseJoinColumns=@JoinColumn(name="ID_TVERSION"))
	private List<ITversion> versiones;
	
	public Interprete() {
		super();
	}
	
	public Interprete(String nombre, String nacionalidad, Boolean vivo, Boolean invitado) {
		super(nombre, nacionalidad, vivo);
		this.invitado = invitado;
	}
	
	@Type(type = "lv.dataaccess.util.DBBooleanValue")
	@Override
	public Boolean getInvitado() {
		return invitado;
	}

	@Override
	public void setInvitado(Boolean invitado) {
		this.invitado = invitado;
	}

	@Override
	public List<ITversion> getVersiones() {
		return versiones;
	}
	
	@Override
	public void setVersiones(List<ITversion> versiones) {
		this.versiones = versiones;
	}
}
